﻿Imports WSEntidades
Imports Utilerias
Imports WSDatos

Public Class ContactoClienteBL
    Public Function RegistrarContactoCliente(ByVal TokenConexion As String, ByVal ContactoCliente As ContactoClienteBE,
                                             ByRef detResp As DetalleRespuesta) As Boolean
        Dim ContactoClienteDAL As ContactoClienteDAL = New ContactoClienteDAL("")
        Dim ClientesDAL As ClientesDAL = New ClientesDAL("")
        detResp.Mensajes = ""
        Try
            TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
            If (EsValidoPara(Enumeraciones.operacionesCatalogos.Registrar, ContactoCliente, detResp.Mensajes)) Then
                ClientesDAL = New ClientesDAL(TokenConexion)
                If (ClientesDAL.existeCliente(ContactoCliente.IdCliente)) Then
                    ContactoClienteDAL = New ContactoClienteDAL(TokenConexion)
                    If (ContactoClienteDAL.registraContactoCliente(ContactoCliente)) Then
                        detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                                 "El Contacto del Cliente se registro con éxito.")
                        Return True
                    Else
                        detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueRegistrado,
                                                 "El Contacto del Cliente no pudo ser registrada en el sistema." & vbCrLf & detResp.Mensajes)
                        Return False
                    End If
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueRegistrado,
                                             String.Format("El Id <{0}> del Cliente indicado no está registrado en el sistema.{1}", ContactoCliente.IdCliente, vbCrLf) & detResp.Mensajes)
                    Return False
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "El Contacto del Cliente no es valido para registrar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "ContactoClienteBL.RegistrarContactoCliente")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al registrar Contacto del Cliente: " & ex.Message)
            Return False
        Finally
            ContactoClienteDAL = Nothing
        End Try
    End Function

    Private Function EsValidoPara(ByVal operacion As Enumeraciones.operacionesCatalogos, ByRef ContactoCliente As ContactoClienteBE, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If Not (String.IsNullOrWhiteSpace(ContactoCliente.IdCliente)) Then
                If (ContactoCliente.IdCliente = 0) Then
                    mensaje &= "El IdCliente del Cliente debe ser diferente de 0." & vbCrLf
                End If
            End If

            Select Case operacion
                Case Enumeraciones.operacionesCatalogos.Registrar
                    If (ContactoCliente.IdContactoCliente > 0) Then
                        mensaje &= "El Id del Contacto del Cliente debe ser 0 para Registrar." & vbCrLf
                    End If

                Case Enumeraciones.operacionesCatalogos.Actualizar
                    If (ContactoCliente.IdContactoCliente <= 0) Then
                        mensaje &= "El Id del Contacto del Cliente debe ser mayor a 0 para Actualizar datos." & vbCrLf
                    End If
            End Select

            'If (String.IsNullOrWhiteSpace(ContactoCliente.Rfc)) Then
            '    mensaje &= "El RFC del Contacto del Cliente es obligatorio, no puede ir el campo vacio." & vbCrLf
            'Else
            '    ContactoCliente.Rfc = ContactoCliente.Rfc.Trim.ToUpper

            '    Select Case ContactoCliente.Rfc.Length
            '        Case 12
            '            If (Not (csValidaciones.esRFCValidoPersonaMoral(ContactoCliente.Rfc))) Then
            '                mensaje &= String.Format("RFC <{0}> no válido para Persona Moral", ContactoCliente.Rfc) & vbCrLf
            '            End If
            '        Case 13
            '            If (Not (csValidaciones.esRFCValidoPersonaFisica(ContactoCliente.Rfc))) Then
            '                mensaje &= String.Format("RFC <{0}> no válido para Persona Física", ContactoCliente.Rfc) & vbCrLf
            '            End If
            '        Case Else
            '            mensaje &= String.Format("Longitud de RFC no válida (<{0}>)", ContactoCliente.Rfc) & vbCrLf
            '    End Select
            'End If
            'EL RFC DEL CONTACTO NO SE VALIDA Y NO ES REQUERIDO, SOLO SE HACE TRIM
            If (String.IsNullOrWhiteSpace(ContactoCliente.Rfc)) Then
                ContactoCliente.Rfc = ""
            End If
            ContactoCliente.Rfc = ContactoCliente.Rfc.Trim.ToUpper
            If (ContactoCliente.Rfc.Length > 13) Then
                ContactoCliente.Rfc = ContactoCliente.Rfc.Substring(0, 13)
            End If

            If (String.IsNullOrWhiteSpace(ContactoCliente.Telefono)) Then
                ContactoCliente.Telefono = ""
            End If
            ContactoCliente.Telefono = ContactoCliente.Telefono.Trim
            If (ContactoCliente.Telefono.Length > 20) Then
                ContactoCliente.Telefono = ContactoCliente.Telefono.Substring(0, 20)
            End If

            If (String.IsNullOrWhiteSpace(ContactoCliente.Contacto)) Then
                mensaje &= "El Nombre del Contacto es obligatorio, no puede ir el campo vacio." & vbCrLf
            Else
                ContactoCliente.Contacto = ContactoCliente.Contacto.Trim
                If (ContactoCliente.Contacto.Length > 255) Then
                    ContactoCliente.Contacto = ContactoCliente.Contacto.Substring(0, 255)
                End If
            End If

            If (String.IsNullOrWhiteSpace(ContactoCliente.Direccion)) Then
                mensaje &= "La Dirección del Contacto es obligatoria, no puede ir el campo vacio." & vbCrLf
            Else
                ContactoCliente.Direccion = ContactoCliente.Direccion.Trim
                If (ContactoCliente.Direccion.Length > 255) Then
                    ContactoCliente.Direccion = ContactoCliente.Direccion.Substring(0, 255)
                End If
            End If

            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "ContactoClienteBL.EsValidoParaRegistrar")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Public Function ActualizaContactoCliente(ByVal TokenConexion As String, ByVal ContactoCliente As ContactoClienteBE,
                                             ByRef detResp As DetalleRespuesta) As Boolean
        detResp.Mensajes = ""
        Dim ContactoClienteDAL As ContactoClienteDAL = New ContactoClienteDAL("")
        Try
            TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
            If (EsValidoPara(Enumeraciones.operacionesCatalogos.Actualizar, ContactoCliente, detResp.Mensajes)) Then
                ContactoClienteDAL = New ContactoClienteDAL(TokenConexion)
                If (ContactoClienteDAL.actualizaContactoCliente(ContactoCliente)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                             "Datos de Contacto del Cliente Actualizados.")
                    Return True
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueActualizado,
                                             "No se pudo realizar la actualización de Datos de Contacto del Cliente." & vbCrLf &
                                             "Verifique que el Id del Contacto y el del Cliente esten registrados en el sistema." & vbCrLf & detResp.Mensajes)
                    Return False
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                     "La informacion no es valida para actualizar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "ContactoClienteBL.ActualizaContactoCliente")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                     detResp.Mensajes & "Excepción al actualizar Contacto del Cliente: " & ex.Message)
            Return False
        Finally
            ContactoClienteDAL = Nothing
        End Try
    End Function

    Public Function GetContactoCliente(ByVal tokenConexion As String, ByVal IdContactoCliente As Integer, ByVal idCliente As Integer,
                                       ByRef detResp As DetalleRespuesta) As ContactoClienteBE
        detResp.Mensajes = ""
        Dim ContactoClienteDAL As ContactoClienteDAL = New ContactoClienteDAL("")
        Dim ContactoClienteBE As ContactoClienteBE
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            If (EsValidoParaGetContactoCliente(IdContactoCliente, idCliente, detResp.Mensajes)) Then
                ContactoClienteDAL = New ContactoClienteDAL(tokenConexion)
                ContactoClienteBE = ContactoClienteDAL.getContactoCliente(IdContactoCliente, idCliente)
                If (ContactoClienteBE IsNot Nothing) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                             "Se obtuvo la información de Contacto del Cliente con éxito.")
                    Return ContactoClienteBE
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_RegistroInexistenteOInactivo,
                                             "No se obtuvo la información de Contacto del Cliente" & vbCrLf & detResp.Mensajes)
                    Return Nothing
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "El ID de Contacto del Cliente proporcionado no existe: " & vbCrLf & detResp.Mensajes)
                Return Nothing
            End If
        Catch ex As Exception
            Log.LogException(ex, "ContactoClienteBL.GetContactoCliente")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al obtener información del Contacto del Cliente: " & ex.Message)
            Return Nothing
        Finally
            ContactoClienteDAL = Nothing
            ContactoClienteBE = Nothing
        End Try
    End Function

    Private Function EsValidoParaGetContactoCliente(ByRef IdContactoCliente As Integer, ByRef idCliente As Integer, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If (String.IsNullOrWhiteSpace(IdContactoCliente)) Then
                mensaje &= "El campo ID de Contacto del Cliente no puede ir  vacio." & vbCrLf
            Else
                If (IdContactoCliente <= 0) Then
                    mensaje &= "El campo ID de Contacto del Cliente debe ser mayor a 0." & vbCrLf
                End If
            End If

            If (String.IsNullOrWhiteSpace(idCliente)) Then
                mensaje &= "El Id del Cliente no puede ir vaciío." & vbCrLf
            Else
                If (idCliente <= 0) Then
                    mensaje &= "El Id del Cliente debe ser mayor a 0." & vbCrLf
                End If
            End If

            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "ContactoClienteBL.EsValidoParaGetContactoCliente")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Public Function GetListadoContactoCliente(ByVal tokenConexion As String, ByVal idCliente As Integer,
                                              ByVal pRegistroInicial As Integer, ByVal pPageSize As Integer,
                                               ByVal pSortColumn As Enumeraciones.campoOrdenamiento, ByVal pSortDirection As Enumeraciones.tipoOrdenamiento,
                                               ByRef pTotalRegistros As Integer,
                                               ByRef detResp As DetalleRespuesta) As List(Of ContactoClienteBE)
        detResp.Mensajes = ""
        pTotalRegistros = 0
        Dim ContactoClienteDAL As ContactoClienteDAL = New ContactoClienteDAL("")
        Dim listContactoClienteBE As List(Of ContactoClienteBE)
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            ContactoClienteDAL = New ContactoClienteDAL(tokenConexion)
            listContactoClienteBE = ContactoClienteDAL.getListadoContactoCliente(idCliente, pRegistroInicial, pPageSize, pSortColumn, pSortDirection, pTotalRegistros)
            If (listContactoClienteBE IsNot Nothing) Then
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                         "Se obtuvo el listado de Contacto de Cliente con éxito.")
                Return listContactoClienteBE
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoObtuvoRegistrosParaListado,
                                         "No se obtuvo el listado de Contacto de Cliente." & vbCrLf & detResp.Mensajes)
                Return Nothing
            End If
        Catch ex As Exception
            Log.LogException(ex, "ContactoClienteBL.GetListadoContactoCliente")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                     detResp.Mensajes & "Excepción al obtener el listado de Contacto de Cliente: " & ex.Message)
            Return Nothing
        Finally
            ContactoClienteDAL = Nothing
            listContactoClienteBE = Nothing
        End Try
    End Function

End Class
